Java Aujourd’hui

Contexte

La plate-forme Java a été développé par:

  • James Gosling dans les années 1990,

  • pour Sun Microsystems
    (OpenOffice, VirtualBox, Solaris, NFS, etc.).

Bibliothèques & API Java

Application Programming Interfaces:
Interfaces des Bibliothèques

  • Standard Edition (Java SE)
    (bases, interfaces graphiques, …),

  • Enterprise Edition (Java EE)
    (serveurs, …),

  • Micro Edition (Java ME)
    (embarqué, mobile, …).

Rachat de Sun Microsystems

En 2010, Oracle Corporation rachète Sun Microsystems:

Oracle est une entreprise “profit-driven” …

Java Standard Edition

Java est-il encore gratuit ?

  • Java is Still Free 2.0.3

    Short Version:

    You can still get the Oracle OpenJDK builds and OpenJDK by other providers for free under an open source license, and the Oracle JDK remains free in some circumstances.

  • Using Java 11 In Production:
    Important Things To Know

    “If you stay up to date on news from the Java community, you may have heard that Oracle have changed their support model for Java.
    Some news is even suggesting that we now have to pay to use Java – this is not true!”

Versions

Cycle de releases de 6 mois:

  • Java 14 publié en mars 2020,

  • Java 15 publié en septembre 2020,

  • Java 16 publié en mars 2021,

  • Java 21 prévu en septembre 2023.

Java 21 Calendrier

https://openjdk.org/projects/jdk/21/:

  • 2023/06/08. Rampdown Phase One (fork from main line)

  • 2023/07/20. Rampdown Phase Two

  • 2023/08/10. Initial Release Candidate

  • 2023/08/24. Final Release Candidate

  • 2023/09/19. General Availability

Long-Term Support

Adoptium

  • 🔗 Site Web Adoptium

  • Projet de la fondation Eclipse (ex-AdoptOpenJDK)

  • “Prebuilt OpenJDK Binaries for Free!”

SDKMAN

Installez votre SDK Java (ou Kotlin, Scala, Grovy, etc.):

$ sdk install java                          
Downloading: java 17.0.7-tem
In progress...
############################## 100.0%
Installing: java 17.0.7-tem
Done installing!

De nombreux fournisseurs différents (Eclipse, Amazon, Azul, Microsoft, SAP, etc.)

Java Mobile

Oubliez Java “Micro Edition” pour les mobiles …

Bienvenue à Android !

Android “est du Java”

  • Basé initialement sur “Java-le-language” mais …
  • Android n’est pas basé sur la JVM (Java Virtual Machine, mais sur l’ART (Android Runtime, et avant sur la VM Dalvik) ; en particulier, le format de bytecode n’est pas compatible.

  • les bibliothèques standards Android ne sont pas compatibles avec les bibliothèques standards Java (ni Standard Edition, ni Mobile Edition).

Oracle America, Inc. v. Google, Inc.

  • A propos de l’usage de Java sur Android,

  • Google affirme que les APIs de Java (une partie de Java SE) ne sont pas soumises au copyright.

Historique sur 🔗 Wikipedia

Les débuts

En 2020

  • ⚖ Appel auprès de la Cour Suprême des Etats-Unis,

  • 😷 Contexte COVID-19 : repoussé à 2021.

En 2021

⚖ Décision de la cour suprême le 5 avril 2021 :

  • favorable à Google (6-2),

  • mais question du droit d’auteur en suspens.

Nous sommes parvenus à la conclusion que dans ce cas, où Google a réutilisé une interface utilisateur en ne prenant que ce qui était nécessaire pour permettre aux utilisateurs de mettre à profit le cumul de leurs talents, la copie par Google de l’interface de programmation (API) Sun Java représente un usage légitime de ce contenu sur le plan du droit.

(doctrine du “fair use”)

Java Enterprise Edition

(J2EE ou Java EE ou Jakarta EE ou EE4J)

2017

Oracle doesn’t want Java EE any more

  • “Oracle wants someone else to lead enterprise Java, though it says it will stay involved.”

  • “Apache and Eclipse are likely candidates to take over Java EE.”

  • Sept. 2017: transfert des droits pour Java EE à la fondation Eclipse.

2018

  • Java EE renamed ‘Jakarta EE’ after Big Red brand spat. “Oracle released the code, but not the name, so now devs have to make sure package names make sense”

    “One important argument for allowing the libre version to keep the Java name was compatibility, but that didn’t sway Oracle. […] while javax package names and namespaces would remain for compatibility, new API technologies would need to adopt the new name.”

2019

2020–2023

Pas de changement majeur :

  • Existence sous le nom Jakarta EE,

  • Gouvernance du projet par la fondation Eclipse.

Java Moderne

  • Il existe des langages plus récents que Java,

  • tirant profit des problèmes constatés avec Java,

  • interopérables avec Java (bibliothèques, runtimes).

  • … et le langage Java lui-même évolue.

Java 21

JEP 430: String Templates (Preview)

JEP 444: Virtual Threads

Threads “légers” (!= threads de l’OS).

Facilitent le développement d’applications concurrentes.

JEP 445: Unnamed Classes and Instance Main Methods (Preview)

Avant :

Après :

Java 16

Types Record

Classes automatiquement dotées d’accesseurs, de constructeurs, de equals, hashCode et toString:

Pattern matching (instanceof)

Blocs de texte

switch comme expression

Antérieurement

Quelques exemples :

  • Java 12 et 11. Nouvelles méthodes pour String :
    repeat, isBlank, strip, lines, etc.

  • Java 10. Inférence de type (variables locales) :

Popularité des langages

Enquête Stack Overflow 2020.

  • Langages les plus aimés : Rust, Typescript, Python, Kotlin, Go, Julia, …

  • Langages les plus craints : VBA, Objective-C, Perl, Assembly, C, PHP, Ruby, C++, Java, R, …

Usage des langages

Enquête JVM 2020

  1. Java

  2. Kotlin

  3. Clojure

  4. Scala

Kotlin (2011)

  • Evolution de Java plutôt que révolution,

  • Par JetBrains, l’entreprise derrière l’IDE IntelliJ IDEA,

  • Interopérable avec Java sur le desktop, le serveur (JVM) et Android,

  • Désormais langage préféré pour le développement Android (Google).

Clojure (2007)

📖 Histoire de Clojure

Un langage fonctionnel et un dialecte de Lisp :

Scala (2004)

  • à la fois fonctionnel et orienté objet,

  • conçu à École Polytechnique Fédérale de Lausanne (EPFL) (en Suisse), notamment par Martin Odersky,

  • language très (trop ?) riche :

    • currying, immutabilité, évaluation tardive, pattern matching, etc.

    • types algébriques, covariance et contravariance, types d’ordre supérieur, etc.